package edu.se.jai.websocketgateway.dto;

import lombok.AllArgsConstructor;
import lombok.Data;
import lombok.NoArgsConstructor;

/**
 * 猜测结果实体类
 * 
 * 用于服务端返回给客户端的猜测结果数据，包含：
 * - 个人反馈：发送给猜测者自己的详细提示
 * - 公开信息：发送给房间内其他玩家的公开消息
 * 
 * 使用静态工厂方法创建不同类型的消息：
 * - createPersonalResult(): 创建个人反馈消息
 * - createPublicResult(): 创建公开消息
 */
@Data
@NoArgsConstructor
@AllArgsConstructor
public class GuessResult {
    private String roomId;
    private String playerName;
    private Integer guess;
    private Boolean result;
    private String message;
    
    /**
     * 构造函数 - 用于个人反馈
     * 发给猜测者自己的详细反馈，包含具体提示
     * 
     * @param roomId 房间ID
     * @param playerName 玩家名称
     * @param guess 猜测数字
     * @param result 猜测结果（true=正确，false=错误）
     * @param hint 个人提示信息（如：您猜的数字太大了）
     */
    public static GuessResult createPersonalResult(String roomId, String playerName, Integer guess, Boolean result, String hint) {
        GuessResult resultObj = new GuessResult();
        resultObj.roomId = roomId;
        resultObj.playerName = playerName;
        resultObj.guess = guess;
        resultObj.result = result;
        resultObj.message = hint;
        return resultObj;
    }
    
    /**
     * 构造函数 - 用于公开消息
     * 发给房间内其他玩家的公开信息
     * 
     * @param roomId 房间ID
     * @param playerName 玩家名称
     * @param guess 猜测数字
     * @param result 猜测结果（true=正确，false=错误）
     */
    public static GuessResult createPublicResult(String roomId, String playerName, Integer guess, Boolean result) {
        GuessResult resultObj = new GuessResult();
        resultObj.roomId = roomId;
        resultObj.playerName = playerName;
        resultObj.guess = guess;
        resultObj.result = result;
        
        if (result) {
            // 猜对了，不显示具体数字
            resultObj.message = String.format("玩家 %s 猜对了！", playerName);
        } else {
            // 猜错了，显示具体数字
            resultObj.message = String.format("玩家 %s 猜测了数字 %d，结果: 错误", playerName, guess);
        }
        
        return resultObj;
    }
}

